Dette spørgsmål har allerede svar her: Express js - kan ikke omdirigere (4 svar) Lukket for 7 år siden. Jeg bruger passportjs med en middleware nedenfor. Det antages at kontrollere, om brugeren er logget ind, når han beder om bestemte ting. Hvis han ikke er logget ind, skal han omdirigeres til login-siden. Jeg har en anmodningsrute som følger: app.put ('/ fantasyteams /: fantasyTeamId', auth.requiresLogin, fantasyteams.update); Denne rute kaldes, når brugeren forsøger at opdatere en ressource kaldet Fantasy Team på hjemmesiden auth.requiresLogin er en middleware som følger: exports.requiresLogin = funktion (req, res, næste) { hvis (req.isAuthenticated ()) { returner næste () } return res.redirect ("/ signin"); }; Efter at have logget ind på min bruger simulerede jeg sessionens udløb ved at slette session-cookien. Derefter via hjemmesiden fremsatte jeg en PUT '/ fantasyteams / 123' anmodning om at opdatere fantasy team nummer 123. fantasyteams.update er simpelthen en mongodb / mongoose save-operation: eksport.update = funktion (req, res) { var fantasyteam = krav.fantasyteam; fantasyteam = _.extend (fantasyteam, req.body); fantasyteam.save (funktion (fejler) { res.jsonp (fantasyteam); }); }; Som forventet fangede rutehåndtereren (app.put ...) ovenfor anmodningen, send den til auth.requiresLogin middleware for at kontrollere, om brugeren er logget ind. Så det viser sig, at brugeren ikke er logget ind, da jeg slettede hans session cookie. res.redirect kaldes som forventet. Webstedet omdirigerer dog ikke til login-siden. Jeg ser dette i node.js-kommandologfiler: PUT / login 404 328ms Hvad har jeg gjort forkert?
2021-02-25 08:20:30
Det ser ud til, at problemet er, at du ikke har en rutehåndterer til PUT / login. Den oprindelige anmodning var en put, så når den omdirigerer, er den stadig en del af den samme "put" -anmodning fra browseren. Bare tilføj en handler til put / post / hvad som helst med app.all ('/ signin') 3 | Er det ikke det svar, du leder efter? Gennemse andre spørgsmål tagged node.js session cookies udtrykker passport.js eller still dit eget spørgsmål.